home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / pascal / pcxbgi2.exe / lha / CYCLE.C < prev    next >
C/C++ Source or Header  |  1991-03-03  |  3KB  |  143 lines

  1. /*
  2.    cycle.c - color cycling on 640x350 16 color image
  3.              reads full-screen .MJB image written by LBM2BGI.EXE
  4.              marty balash
  5.              03/02/91
  6.  
  7.     ******** NEED TO LINK IN EGAVGA.BGI
  8. */
  9.   
  10. #include <graphics.h>
  11. #include <alloc.h>
  12. #include <fcntl.h>
  13. #include <sys/stat.h>
  14. #include <io.h>
  15.  
  16. struct IMAGEHDR{
  17.   char id[8];                 /* id      - use this for verifying format */
  18.   unsigned size;              /* size    - bytes to malloc */
  19.   struct palettetype palette; /* palette - for image */
  20. }hdr;
  21.  
  22. main()
  23. {
  24.   if(!openegascreen())          /* open 16 color 640x350 screen */
  25.     exit(255);
  26.  
  27.   printhelp();                  /* show message while loading file */
  28.  
  29.   setactivepage(1);             /* send all graphics output other page */
  30.  
  31.   if(!showpic("cycle.mjb"))     /* put bgi images on page */
  32.     exit(255);
  33.  
  34.   puts("\nPRESS ANY KEY...\n"); /* graphics loaded */
  35.   getch();
  36.   
  37.   setvisualpage(1);             /* show other page */
  38.  
  39.   cycle();                      /* alternate colors in palette */
  40.  
  41.   closegraph();
  42. }
  43.  
  44. printhelp()
  45. {
  46.   puts("Faster -  CSR UP");
  47.   puts("Slower -  CSR DOWN\n");
  48.   puts("Exit   -  ESC\n\n");
  49.   puts("PLEASE WAIT...");
  50. }
  51.  
  52. cycle()
  53. {
  54.   int i;
  55.   char ch;
  56.   signed char lastcolor;
  57.   unsigned pause=60;
  58.  
  59.   while(1){
  60.     while(!kbhit()){
  61.       lastcolor=hdr.palette.colors[0];
  62.       for(i=0;i<16;i++)
  63.         hdr.palette.colors[i]=hdr.palette.colors[i+1];
  64.       hdr.palette.colors[15]=lastcolor;
  65.       setallpalette(&(hdr.palette));
  66.       delay(pause);
  67.     }
  68.     if((ch=getch())==27)
  69.       break;
  70.     if(ch==32||ch==13)
  71.       break;
  72.     if(ch==80)
  73.       pause++;
  74.     if(ch==72)
  75.       pause--;
  76.     if(pause<0)
  77.       pause=250;
  78.     if(pause>250)
  79.       pause=0;
  80.   }
  81. }
  82.  
  83. showpic(s)
  84. char *s;
  85. {
  86.   int datahandle,i;
  87.   char *buff;
  88.   long fl;
  89.  
  90.   if((datahandle=open(s,O_RDONLY|O_BINARY))==-1){
  91.     closegraph();
  92.     puts("Can't Find File CYCLE.MJB");
  93.     return(0);
  94.   }
  95.   if (filelength(datahandle)<30000L){
  96.     close(datahandle);
  97.     closegraph();
  98.     printf("ERROR: This isn't a full-screen image\n");
  99.     exit(255);
  100.   }
  101.   read(datahandle,&hdr,sizeof(hdr)); /* read header struct */
  102.   if(strcmp(hdr.id,"PCX2BGI")!=0){   /* this should always be "PCX2BGI" */
  103.     closegraph();
  104.     close(datahandle);
  105.     printf("Invalid picture format\n");
  106.     exit(255);
  107.   }
  108.   setallpalette(&(hdr.palette));
  109.   if((buff=malloc(22406))==NULL){  /* malloc enough for 1/5 of screen */
  110.     close(datahandle);
  111.     closegraph();
  112.     puts("Can't Allocate Memory");
  113.     return(0);
  114.   }
  115.   for(i=0;i<350;i+=70){  /* read 5 consecutive bgi images from file */
  116.     read(datahandle,buff,22406);
  117.     putimage(0,i,buff,COPY_PUT);
  118.   }
  119.   free(buff);
  120.   close(datahandle);
  121.   return(1);
  122. }
  123.  
  124. openegascreen()
  125. {
  126.   int driver = EGA;
  127.   int mode =   EGAHI;
  128.   int result;
  129.   
  130.   /* init graphics system */
  131.   if (registerbgidriver(EGAVGA_driver)<0){
  132.     printf("ERROR: Graphics System\n");
  133.     return(0);
  134.   }
  135.   initgraph(&driver,&mode,"");
  136.   result=graphresult();
  137.   if (result!=grOk) {
  138.     printf("ERROR : %s\n",grapherrormsg(result));
  139.     return(0);
  140.   }
  141.  return(1);
  142. }
  143.